Opaque Type
調べようとしたモチベ
code:swift
func f(arg1:T1): some I1{
/* ... */
return result;
}
このsome I1の具体的な型はコンパイル時に決定できる必要がある。
この関数の利用者から見てわかるのは、I1を実装する何かのオブジェクトが返るというだけ
具体的にそれがどのような型なのかは知ることができない。
関数の実装者は、ある具体的な型を返すものとして実装する。 関数の利用者は、これにより「戻り値の型が具体的にどのI1実装型なのか」に依存しないコードを書かなければならない。 外部から見ると戻り値の制約が少ない。
こうすると、何か内部に変更があったとしても、制約が緩いので外部に変更が及びにくい。
実装者が具体的な型を定めて書き、使用者が抽象的な型をもとにして書く。
参考